home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 August: Tool Chest / Dev.CD Aug 94.toast / Sample Code / MoreFiles 1.1.1 / MoreFiles.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-01-22  |  21.2 KB  |  633 lines  |  [TEXT/KAHL]

  1. /*
  2. **    Apple Macintosh Developer Technical Support
  3. **
  4. **    The long lost high-level and FSSpec File Manager functions.
  5. **
  6. **    by Jim Luther, Apple Developer Technical Support
  7. **
  8. **    File:        MoreFiles.h
  9. **
  10. **    Copyright © 1992-1994 Apple Computer, Inc.
  11. **    All rights reserved.
  12. **
  13. **    You may incorporate this sample code into your applications without
  14. **    restriction, though the sample code has been provided "AS IS" and the
  15. **    responsibility for its operation is 100% yours.  However, what you are
  16. **    not permitted to do is to redistribute the source as "DSC Sample Code"
  17. **    after having made changes. If you're going to re-distribute the source,
  18. **    we require that you make it clear in the source that the code was
  19. **    descended from Apple Sample Code, but that you've made changes.
  20. */
  21.  
  22. #ifndef __MOREFILES__
  23. #define __MOREFILES__
  24.  
  25.  
  26. #ifndef __TYPES__
  27. #include <Types.h>
  28. #endif
  29.  
  30. #ifndef __ERRORS__
  31. #include <Errors.h>
  32. #endif
  33.  
  34. #ifndef __MEMORY__
  35. #include <Memory.h>
  36. #endif
  37.  
  38. #ifndef __OSUTILS__
  39. #include <OSUtils.h>
  40. #endif
  41.  
  42. #ifndef __FILES__
  43. #include <Files.h>
  44. #endif
  45.  
  46. /*    Sharing.h should be in Files.h, but isn't yet... */
  47. //#ifndef __SHARING__
  48. //#include "Sharing.h"
  49. //#endif
  50.  
  51.  
  52. /*****************************************************************************/
  53.  
  54. pascal    OSErr    HGetVolParms(StringPtr volName,
  55.                              short vRefNum,
  56.                              GetVolParmsInfoBuffer *volParmsInfo,
  57.                              long *infoSize);
  58. /*    Use HGetVolParms to determine the characteristics of a volume.
  59.     A result of paramErr usually just means the volume doesn't
  60.     support PBHGetVolParms and the feature you were going to check
  61.     for isn't available.
  62.  
  63.     volName            input:    A pointer to the name of a mounted volume
  64.                             or nil.
  65.     vRefNum            input:    Volume specification.
  66.     volParmsInfo    input:    Pointer to GetVolParmsInfoBuffer where the
  67.                             volume attributes information is returned.
  68.                     output:    Atributes information.
  69.     infoSize        input:    Size of buffer pointed to by volParmsInfo.
  70.                     output: Size of data actually returned.
  71. */
  72.  
  73. /*****************************************************************************/
  74.  
  75. pascal    OSErr    HCreateMinimum(short vRefNum,
  76.                                long dirID,
  77.                                const Str255 fileName);
  78. /*    Use HCreateMinimum to create a new file without attempting to set the
  79.     creator and file type of the new file.  This function is needed to
  80.     create a file in an AppleShare "drop box" where the user can make
  81.     changes, but cannot see folder or files. 
  82.     
  83.     vRefNum        input:    Volume specification.
  84.     dirID        input:    Directory ID.
  85.     fileName    input:    The name of the new file.
  86. */
  87.  
  88. /*****************************************************************************/
  89.  
  90. pascal    OSErr    FSpCreateMinimum(const FSSpec *spec);
  91. /*    Use FSpCreateMinimum to create a new file without attempting to set
  92.     the creator and file type of the new file.  This function is needed to
  93.     create a file in an AppleShare "dropbox" where the user can make
  94.     changes, but cannot see folder or files. 
  95.     
  96.     spec        input:    An FSSpec record specifying the file to create.
  97. */
  98.  
  99. /*****************************************************************************/
  100.  
  101. pascal    OSErr    ExchangeFiles(short vRefNum,
  102.                               long srcDirID,
  103.                               const Str255 srcName,
  104.                               long dstDirID,
  105.                               const Str255 dstName);
  106. /*    Use ExchangeFiles to exchange the data stored in two files on the
  107.     same volume.
  108.  
  109.     vRefNum        input:    Volume specification.
  110.     srcDirID    input:    Source directory ID.
  111.     srcName        input:    Source file name.
  112.     dstDirID    input:    Destination directory ID.
  113.     dstName        input:    Destination file name.
  114. */
  115.  
  116. /*****************************************************************************/
  117.  
  118. pascal    OSErr    ResolveFileIDRef(StringPtr volName,
  119.                                  short vRefNum,
  120.                                  long fileID,
  121.                                  long *parID,
  122.                                  StringPtr fileName);
  123. /*    Use ResolveFileIDRef to retrieve the filename and parent directory ID
  124.     of the file with the specified file ID.
  125.     
  126.     volName    input:    A pointer to the name of a mounted volume
  127.                     or nil.
  128.     fileID    input:    The file ID.
  129.     vRefNum    input:    Volume specification.
  130.     parID    output:    The parent directory ID of the file.
  131.     name    input:    Points to a buffer (minimum Str63) where the filename
  132.                     is to be returned or must be nil.
  133.             output:    The filename.
  134. */
  135.  
  136. /*****************************************************************************/
  137.  
  138. pascal    OSErr    CreateFileIDRef(short vRefNum,
  139.                                 long parID,
  140.                                 const Str255 fileName,
  141.                                 long *fileID);
  142. /*    Use CreateFileIDRef to establish a file ID for a file.
  143.  
  144.     vRefNum        input:    Volume specification.
  145.     parID        input:    Directory ID.
  146.     fileName    input:    The name of the file.
  147.     fileID        output:    The file ID.
  148. */
  149.  
  150. /*****************************************************************************/
  151.  
  152. pascal    OSErr    FSpCreateFileIDRef(const FSSpec *spec,
  153.                                    long *fileID);
  154. /*    Use FSpCreateFileIDRef to establish a file ID for a file.
  155.  
  156.     spec        input:    An FSSpec record specifying the file.
  157.     fileID        output:    The file ID.
  158. */
  159.  
  160. /*****************************************************************************/
  161.  
  162. pascal    OSErr    DeleteFileIDRef(StringPtr volName,
  163.                                 short vRefNum,
  164.                                 long fileID);
  165. /*    Use DeleteFileIDRef to delete a file ID reference.
  166.  
  167.     volName    input:    A pointer to the name of a mounted volume
  168.                     or nil.
  169.     vRefNum    input:    Volume specification.
  170.     fileID    input:    The file ID.
  171. */
  172.  
  173. /*****************************************************************************/
  174.  
  175. pascal    OSErr    FlushFile(short refNum);
  176. /*    Use FlushFile to write the contents of a file's access path buffer.
  177.  
  178.     refNum    input:    The file reference number of an open file.
  179. */
  180.  
  181. /*****************************************************************************/
  182.  
  183. pascal    OSErr    LockRange(short refNum,
  184.                           long rangeLength,
  185.                           long rangeStart);
  186. /*    Use LockRange to lock a portion of a file.
  187.  
  188.     refNum        input:    The file reference number of an open file.
  189.     rangeLength    input:    The number of bytes in the range.
  190.     rangeStart    input:    The starting byte in the range to lock.
  191. */
  192.  
  193. /*****************************************************************************/
  194.  
  195. pascal    OSErr    UnlockRange(short refNum,
  196.                             long rangeLength,
  197.                             long rangeStart);
  198. /*    Use UnlockRange to unlock a previously locked range.
  199.  
  200.     refNum        input:    The file reference number of an open file.
  201.     rangeLength    input:    The number of bytes in the range.
  202.     rangeStart    input:    The starting byte in the range to unlock.
  203. */
  204.  
  205. /*****************************************************************************/
  206.  
  207. pascal    OSErr    GetForeignPrivs(short vRefNum,
  208.                                 long dirID,
  209.                                 StringPtr name,
  210.                                 Ptr foreignPrivBuffer,
  211.                                 long *foreignPrivSize,
  212.                                 long *foreignPrivInfo1,
  213.                                 long *foreignPrivInfo2,
  214.                                 long *foreignPrivInfo3,
  215.                                 long *foreignPrivInfo4);
  216. /*    Use GetForeignPrivs to determine the native access-control
  217.     information for a file or directory stored on a volume managed by
  218.     a foreign file system.
  219.     
  220.     vRefNum                input:    Volume specification.
  221.     dirID                input:    Directory ID.
  222.     name                input:    Pointer to object name, or nil when dirID
  223.                                 specifies a directory that's the object.
  224.     foreignPrivBuffer    input:    Pointer to buffer where the privilege
  225.                                 information is returned.
  226.                         output:    Privilege information.
  227.     foreignPrivSize        input:    Size of buffer pointed to by
  228.                                 foreignPrivBuffer.
  229.                         output: Amount of buffer actually used.
  230.     foreignPrivInfo1    output:    Information specific to privilege model.
  231.     foreignPrivInfo2    output:    Information specific to privilege model.
  232.     foreignPrivInfo3    output:    Information specific to privilege model.
  233.     foreignPrivInfo4    output:    Information specific to privilege model.
  234. */
  235.  
  236. /*****************************************************************************/
  237.  
  238. pascal    OSErr    FSpGetForeignPrivs(const FSSpec *spec,
  239.                                    Ptr foreignPrivBuffer,
  240.                                    long *foreignPrivSize,
  241.                                    long *foreignPrivInfo1,
  242.                                    long *foreignPrivInfo2,
  243.                                    long *foreignPrivInfo3,
  244.                                    long *foreignPrivInfo4);
  245. /*    Use FSpGetForeignPrivs to determine the native access-control
  246.     information for a file or directory stored on a volume managed by
  247.     a foreign file system.
  248.     
  249.     spec                input:    An FSSpec record specifying the object.
  250.     foreignPrivBuffer    input:    Pointer to buffer where the privilege
  251.                                 information is returned.
  252.                         output:    Privilege information.
  253.     foreignPrivSize        input:    Size of buffer pointed to by
  254.                                 foreignPrivBuffer.
  255.                         output: Amount of buffer actually used.
  256.     foreignPrivInfo1    output:    Information specific to privilege model.
  257.     foreignPrivInfo2    output:    Information specific to privilege model.
  258.     foreignPrivInfo3    output:    Information specific to privilege model.
  259.     foreignPrivInfo4    output:    Information specific to privilege model.
  260. */
  261.  
  262. /*****************************************************************************/
  263.  
  264. pascal    OSErr    SetForeignPrivs(short vRefNum,
  265.                                 long dirID,
  266.                                 StringPtr name,
  267.                                 Ptr foreignPrivBuffer,
  268.                                 long *foreignPrivSize,
  269.                                 long foreignPrivInfo1,
  270.                                 long foreignPrivInfo2,
  271.                                 long foreignPrivInfo3,
  272.                                 long foreignPrivInfo4);
  273. /*    Use SetForeignPrivs to change the native access-control information
  274.     for a file or directory stored on a volume managed by a foreign
  275.     file system.
  276.     
  277.     vRefNum                input:    Volume specification.
  278.     dirID                input:    Directory ID.
  279.     name                input:    Pointer to object name, or nil when dirID
  280.                                 specifies a directory that's the object.
  281.     foreignPrivBuffer    input:    Pointer to privilege information buffer.
  282.     foreignPrivSize        input:    Size of buffer pointed to by
  283.                                 foreignPrivBuffer.
  284.                         output: Amount of buffer actually used.
  285.     foreignPrivInfo1    input:    Information specific to privilege model.
  286.     foreignPrivInfo2    input:    Information specific to privilege model.
  287.     foreignPrivInfo3    input:    Information specific to privilege model.
  288.     foreignPrivInfo4    input:    Information specific to privilege model.
  289. */
  290.  
  291. /*****************************************************************************/
  292.  
  293. pascal    OSErr    FSpSetForeignPrivs(const FSSpec *spec,
  294.                                    Ptr foreignPrivBuffer,
  295.                                    long *foreignPrivSize,
  296.                                    long foreignPrivInfo1,
  297.                                    long foreignPrivInfo2,
  298.                                    long foreignPrivInfo3,
  299.                                    long foreignPrivInfo4);
  300. /*    Use FSpSetForeignPrivs to change the native access-control information
  301.     for a file or directory stored on a volume managed by a foreign
  302.     file system.
  303.     
  304.     spec                input:    An FSSpec record specifying the object.
  305.     foreignPrivBuffer    input:    Pointer to privilege information buffer.
  306.     foreignPrivSize        input:    Size of buffer pointed to by
  307.                                 foreignPrivBuffer.
  308.                         output: Amount of buffer actually used.
  309.     foreignPrivInfo1    input:    Information specific to privilege model.
  310.     foreignPrivInfo2    input:    Information specific to privilege model.
  311.     foreignPrivInfo3    input:    Information specific to privilege model.
  312.     foreignPrivInfo4    input:    Information specific to privilege model.
  313. */
  314.  
  315. /*****************************************************************************/
  316.  
  317. pascal    OSErr    HGetLogInInfo(StringPtr volName,
  318.                               short vRefNum,
  319.                               short *loginMethod,
  320.                               StringPtr userName);
  321. /*    Use HGetLogInInfo to determine the login method and user name used to
  322.     log on to a particular shared volume.
  323.     
  324.     volName        input:    A pointer to the name of a mounted volume
  325.                         or nil.
  326.     vRefNum        input:    The volume reference number.
  327.     loginMethod    output:    The login method used (kNoUserAuthentication,
  328.                         kPassword, kEncryptPassword, or
  329.                         kTwoWayEncryptPassword).
  330.     userName    input:    Points to a buffer (minimum Str31) where the user
  331.                         name is to be returned or must be nil.
  332.                 output:    The user name.
  333. */
  334.  
  335. /*****************************************************************************/
  336.  
  337. pascal    OSErr    HGetDirAccess(short vRefNum,
  338.                               long dirID,
  339.                               StringPtr name,
  340.                               long *ownerID,
  341.                               long *groupID,
  342.                               long *accessRights);
  343. /*    Use HGetDirAccess to get the directory access control information for
  344.     a directory on a shared volume.
  345.     
  346.     vRefNum            input:    Volume specification.
  347.     dirID            input:    Directory ID.
  348.     name            input:    Pointer to directory name, or nil if dirID
  349.                             specifies the directory.
  350.     ownerID            output:    The directory's owner ID.
  351.     groupID            output:    The directory's group ID or
  352.                             0 if no group affiliation.
  353.     accessRights    output:    The directory's access rights.
  354. */
  355.  
  356. /*****************************************************************************/
  357.  
  358. pascal    OSErr    FSpGetDirAccess(const FSSpec *spec,
  359.                                 long *ownerID,
  360.                                 long *groupID,
  361.                                 long *accessRights);
  362. /*    Use FSpGetDirAccess to get the directory access control information
  363.     for a directory on a shared volume.
  364.     
  365.     spec            input:    An FSSpec record specifying the directory.
  366.     ownerID            output:    The directory's owner ID.
  367.     groupID            output:    The directory's group ID or
  368.                             0 if no group affiliation.
  369.     accessRights    output:    The directory's access rights.
  370. */
  371.  
  372. /*****************************************************************************/
  373.  
  374. pascal    OSErr    HSetDirAccess(short vRefNum,
  375.                               long dirID,
  376.                               StringPtr name,
  377.                               long ownerID,
  378.                               long groupID,
  379.                               long accessRights);
  380. /*    Use HSetDirAccess to change the directory access control information
  381.     for a directory on a shared volume.
  382.     
  383.     vRefNum            input:    Volume specification.
  384.     dirID            input:    Directory ID.
  385.     name            input:    Pointer to directory name, or nil if dirID
  386.                             specifies the directory.
  387.     ownerID            output:    The directory's owner ID.
  388.     groupID            output:    The directory's group ID or
  389.                             0 if no group affiliation.
  390.     accessRights    output:    The directory's access rights.
  391. */
  392.  
  393. /*****************************************************************************/
  394.  
  395. pascal    OSErr    FSpSetDirAccess(const FSSpec *spec,
  396.                                 long ownerID,
  397.                                 long groupID,
  398.                                 long accessRights);
  399. /*    Use FSpSetDirAccess to change the directory access control information
  400.     for a directory on a shared volume.
  401.     
  402.     spec            input:    An FSSpec record specifying the directory.
  403.     ownerID            output:    The directory's owner ID.
  404.     groupID            output:    The directory's group ID or
  405.                             0 if no group affiliation.
  406.     accessRights    output:    The directory's access rights.
  407. */
  408.  
  409. /*****************************************************************************/
  410.  
  411. pascal    OSErr    HMapID(StringPtr volName,
  412.                        short vRefNum,
  413.                        long ID,
  414.                        short objType,
  415.                        StringPtr name);
  416. /*    Use HMapID to determine the name of a user or group if you know the
  417.     user or group ID.
  418.     
  419.     volName        input:    A pointer to the name of a mounted volume
  420.                         or nil.
  421.     vRefNum        input:    Volume specification.
  422.     objType        input:    The mapping function code: 1 if you're mapping a
  423.                         user ID to a user name or 2 if you're mapping a
  424.                         group ID to a group name.
  425.     name        input:    Points to a buffer (minimum Str31) where the user
  426.                         or group name is to be returned or must be nil.
  427.                 output:    The user or group name.
  428. */
  429.  
  430. /*****************************************************************************/
  431.  
  432. pascal    OSErr    HMapName(StringPtr volName,
  433.                          short vRefNum,
  434.                          const Str255 name,
  435.                          short objType,
  436.                          long *ID);
  437. /*    Use HMapName to determine the user or group ID if you know the user or
  438.     group name.
  439.     
  440.     volName        input:    A pointer to the name of a mounted volume
  441.                         or nil.
  442.     vRefNum        input:    Volume specification.
  443.     name        input:    The user or group name.
  444.     objType        input:    The mapping function code: 3 if you're mapping a
  445.                         user name to a user ID or 4 if you're mapping a
  446.                         group name to a group ID.
  447.     ID            output:    The user or group ID.
  448. */
  449.  
  450. /*****************************************************************************/
  451.  
  452. pascal    OSErr    HCopyFile(short srcVRefNum,
  453.                           long srcDirID,
  454.                           const Str255 srcName,
  455.                           short dstVRefNum,
  456.                           long dstDirID,
  457.                           StringPtr dstPathname,
  458.                           StringPtr copyName);
  459. /*    Use HCopyFile to duplicate a file and optionally to rename it.
  460.     The source and destination volumes must be on the same file server.
  461.     
  462.     srcVRefNum    input:    Source volume specification.
  463.     srcDirID    input:    Source directory ID.
  464.     srcName        input:    Source file name.
  465.     dstVRefNum    input:    Destination volume specification.
  466.     dstDirID    input:    Destination directory ID.
  467.     dstPathname    input:    Pointer to destination directory name, or
  468.                         nil when dstDirID specifies a directory.
  469.     copyName    input:    Points to the new file name if the file is to be
  470.                         renamed or nil if the file isn't to be renamed.
  471. */
  472.  
  473. /*****************************************************************************/
  474.  
  475. pascal    OSErr    FSpCopyFile(const FSSpec *srcSpec,
  476.                             const FSSpec *dstSpec,
  477.                             StringPtr copyName);
  478. /*    Use FSpCopyFile to duplicate a file and optionally to rename it.
  479.     The source and destination volumes must be on the same file server.
  480.     
  481.     srcSpec        input:    An FSSpec record specifying the source file.
  482.     dstSpec        input:    An FSSpec record specifying the destination
  483.                         directory.
  484.     copyName    input:    Points to the new file name if the file is to be
  485.                         renamed or nil if the file isn't to be renamed.
  486. */
  487.  
  488. /*****************************************************************************/
  489.  
  490. pascal    OSErr    HMoveRename(short vRefNum,
  491.                             long srcDirID,
  492.                             const Str255 srcName,
  493.                             long dstDirID,
  494.                             StringPtr dstpathName,
  495.                             StringPtr copyName);
  496. /*    Use HMoveRename to move a file or directory and optionally to rename
  497.     it.  The source and destination locations must be on the same shared
  498.     volume.
  499.     
  500.     vRefNum        input:    Volume specification.
  501.     srcDirID    input:    Source directory ID.
  502.     srcName        input:    The source object name.
  503.     dstDirID    input:    Destination directory ID.
  504.     dstName        input:    Pointer to destination directory name, or
  505.                         nil when dstDirID specifies a directory.
  506.     copyName    input:    Points to the new name if the object is to be
  507.                         renamed or nil if the object isn't to be renamed.
  508. */
  509.  
  510. /*****************************************************************************/
  511.  
  512. pascal    OSErr    FSpMoveRename(const FSSpec *srcSpec,
  513.                               const FSSpec *dstSpec,
  514.                               StringPtr copyName);
  515. /*    Use FSpMoveRename to move a file or directory and optionally to
  516.     rename it. The source and destination locations must be on the same
  517.     shared volume.
  518.     
  519.     srcSpec        input:    An FSSpec record specifying the source object.
  520.     dstSpec        input:    An FSSpec record specifying the destination
  521.                         directory.
  522.     copyName    input:    Points to the new name if the object is to be
  523.                         renamed or nil if the object isn't to be renamed.
  524. */
  525.  
  526. /*****************************************************************************/
  527.  
  528. pascal    OSErr    GetVolMountInfoSize(StringPtr volName,
  529.                                     short vRefNum,
  530.                                     short *size);
  531. /*    Use GetVolMountInfoSize to determine the how much space to allocate
  532.     for a volume mounting information record.
  533.     
  534.     volName        input:    A pointer to the name of a mounted volume
  535.                         or nil.
  536.     vRefNum        input:    Volume specification.
  537.     size        output:    The space needed (in bytes) of the volume mounting
  538.                         information record.
  539. */
  540.  
  541. /*****************************************************************************/
  542.  
  543. pascal    OSErr    GetVolMountInfo(StringPtr volName,
  544.                                 short vRefNum,
  545.                                 Ptr volMountInfo);
  546. /*    Use GetVolMountInfo to retrieve a volume mounting information record
  547.     containing all the information needed to mount the volume, except
  548.     for passwords.
  549.     
  550.     volName            input:    A pointer to the name of a mounted volume
  551.                             or nil.
  552.     vRefNum            input:    Volume specification.
  553.     volMountInfo    output:    Points to a volume mounting information
  554.                             record where the mounting information is to
  555.                             be returned.
  556. */
  557.  
  558. /*****************************************************************************/
  559.  
  560. pascal    OSErr    VolumeMount(Ptr volMountInfo,
  561.                             short *vRefNum);
  562. /*    Use VolumeMount to mount a volume using a volume mounting information
  563.     record.
  564.     
  565.     volMountInfo    input:    Points to a volume mounting information record.
  566.     vRefNum            output:    A volume reference number.
  567. */
  568.  
  569. /*****************************************************************************/
  570.  
  571. pascal    OSErr    Share(short vRefNum,
  572.                       long dirID,
  573.                       StringPtr name);
  574. /*    Use Share to establish a local volume or directory as a share point.
  575.  
  576.     vRefNum            input:    Volume specification.
  577.     dirID            input:    Directory ID.
  578.     name            input:    Pointer to directory name, or nil if dirID
  579.                             specifies the directory.
  580. */
  581.  
  582. /*****************************************************************************/
  583.  
  584. pascal    OSErr    FSpShare(const FSSpec *spec);
  585. /*    Use FSpShare to establish a local volume or directory as a share point.
  586.  
  587.     spec    input:    An FSSpec record specifying the share point.
  588. */
  589.  
  590. /*****************************************************************************/
  591.  
  592. pascal    OSErr    Unshare(short vRefNum,
  593.                         long dirID,
  594.                         StringPtr name);
  595. /*    Use Unshare to remove a share point.
  596.  
  597.     vRefNum            input:    Volume specification.
  598.     dirID            input:    Directory ID.
  599.     name            input:    Pointer to directory name, or nil if dirID
  600.                             specifies the directory.
  601. */
  602.  
  603. /*****************************************************************************/
  604.  
  605. pascal    OSErr    FSpUnshare(const FSSpec *spec);
  606. /*    Use FSpUnshare to remove a share point.
  607.  
  608.     spec    input:    An FSSpec record specifying the share point.
  609. */
  610.  
  611. /*****************************************************************************/
  612.  
  613. pascal    OSErr    GetUGEntry(short objType,
  614.                            StringPtr objName,
  615.                            long *objID);
  616. /*    Use GetUGEntry to get a list of user or group entries from the
  617.     local file server.
  618.  
  619.     objType        input:    The object type: -1 = group; 0 = user
  620.     objName        input:    Points to a buffer (minimum Str31) where the user
  621.                         or group name is to be returned or must be nil.
  622.                 output:    The user or group name.
  623.     objID        input:    O to get the first user or group. If the entry objID
  624.                         last returned by GetUGEntry is passed, then user or
  625.                         group whose alphabetically next in the list of entries
  626.                         is returned.
  627.                 output:    The user or group ID.
  628. */
  629.  
  630. /*****************************************************************************/
  631.  
  632. #endif
  633.